package com.spider.spiderflowable.common;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.spider.spiderflowable.utils.BeanUtils;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import liquibase.pro.packaged.T;

/**
 * @author xiong.bo
 * @version 1.0
 * @date 2025/5/1 16:23
 */
public class MybatisBeanUtil {

//  public static <A, B>  IPage<B> convertPage(Page<A> pageModel, Class<B> targetClass) {
//
//    List<A> records = pageModel.getRecords();
//    List<B> list = BeanUtils.copyList(records, targetClass);
//
//    IPage requestVoIPage = new Page<>();
//    requestVoIPage.setRecords(list);
//    requestVoIPage.setTotal(pageModel.getTotal());
//    requestVoIPage.setCurrent(pageModel.getCurrent());
//    requestVoIPage.setPages(pageModel.getPages());
//
//    return requestVoIPage;
//  }

  /**
   * 使用 BeanUtils.copyProperties 进行属性拷贝的 Page 转换
   *
   * @param pageA       源分页对象
   * @param targetClass 目标类 Class 对象
   * @param <A>         源数据类型
   * @param <B>         目标数据类型
   * @return 转换后的分页对象
   */
  public static <A, B> Page<B> convertPage(IPage<A> pageA, Class<B> targetClass) {
    return convertPage(pageA, source -> {
      return BeanUtils.copyBean(source, targetClass);
    });
  }

  public static <A, B> Page<B> convertPage(IPage<A> pageA, Function<A, B> convertFunc) {
    Page<B> pageB = new Page<>();
    // 拷贝分页信息
    pageB.setCurrent(pageA.getCurrent());
    pageB.setSize(pageA.getSize());
    pageB.setTotal(pageA.getTotal());
    pageB.setPages(pageA.getPages());

    // 转换数据内容
    List<B> recordsB = pageA.getRecords().stream()
        .map(convertFunc)
        .collect(Collectors.toList());
    pageB.setRecords(recordsB);

    return pageB;
  }


  private MybatisBeanUtil(){}
}
